﻿using BLevy.Entidad;
using BLevy.Negocio;
using BLevy.UI.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmImprimirPrintDocument : Form
    {

        private int totalcupones = 0;
        private int cuponporpagina = 0;
        PaperSize paperSize = new PaperSize("A4", 827, 1169);
        Font fuente = new Font("Arial", 8, FontStyle.Regular);
        Font fuente_cdb = new Font("3 of 9 Barcode", 22, FontStyle.Regular);
        Pen lapiz = new Pen(Color.Black);

        private IList<Cupon> cuponesL;

        public frmImprimirPrintDocument()
        {
            InitializeComponent();
        }

        private void frmImprimirPrintDocument_Load(object sender, EventArgs e)
        {
            GetCupones();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ImpresionCupones imprimirCupon = new ImpresionCupones(cuponesL);
            imprimirCupon.Imprimir();
        }


        private void GetCupones()
        {
            //obtener ultimos cupones segun la ultima fecha 
            cuponesL = Cupones.GetAllCuponesAImprimir();
        }


        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            Socio socio = null;

            int arribaY = 20;
            //int abajoY = 565;
            //decimal total = 0;

            Bitmap logo = new Bitmap(Properties.Resources.logo_6cm);
            e.Graphics.DrawImage(logo, 80, 40);
            e.Graphics.DrawImage(logo, 635, 40);

            //e.Graphics.DrawImage(logo, 80, 585);
            //e.Graphics.DrawImage(logo, 635, 585);

            Rectangle recIzqArriba = new Rectangle(10, 10, 250, 540);
            Rectangle recIzqArriba1 = new Rectangle(10, 10, 250, 30);
            Rectangle recIzqArriba2 = new Rectangle(10, 40, 250, 60);
            Rectangle recIzqArriba3 = new Rectangle(10, 300, 250, 120);
            Rectangle recCentroArriba = new Rectangle(265, 10, 300, 540);
            Rectangle recCentroArriba1 = new Rectangle(265, 10, 300, 50);
            Rectangle recCentroAbajo = new Rectangle(265, 420, 300, 130);
            Rectangle recDerArriba = new Rectangle(565, 10, 250, 540);
            Rectangle recDerArriba1 = new Rectangle(565, 10, 250, 30);
            Rectangle recDerArriba2 = new Rectangle(565, 40, 250, 60);
            Rectangle recDerArriba3 = new Rectangle(565, 300, 250, 120); 
            Rectangle recArribaIzqVencimiento1 = new Rectangle(90, 300, 170, 60);
            Rectangle recArribaIzqVencimiento2 = new Rectangle(90, 360, 170, 60);
            Rectangle recArribaDerVencimiento1 = new Rectangle(645, 300, 170, 60);
            Rectangle recArribaDerVencimiento2 = new Rectangle(645, 360, 170, 60);

            e.Graphics.DrawRectangle(lapiz, recIzqArriba);
            e.Graphics.DrawRectangle(lapiz, recIzqArriba1);
            e.Graphics.DrawRectangle(lapiz, recIzqArriba2);
            e.Graphics.DrawRectangle(lapiz, recIzqArriba3);
            e.Graphics.DrawRectangle(lapiz, recCentroArriba);
            e.Graphics.DrawRectangle(lapiz, recDerArriba);
            e.Graphics.DrawRectangle(lapiz, recDerArriba1);
            e.Graphics.DrawRectangle(lapiz, recDerArriba2);
            e.Graphics.DrawRectangle(lapiz, recDerArriba3);
            e.Graphics.DrawRectangle(lapiz, recCentroArriba1);
            e.Graphics.DrawRectangle(lapiz, recCentroAbajo);
            e.Graphics.DrawRectangle(lapiz, recArribaIzqVencimiento1);
            e.Graphics.DrawRectangle(lapiz, recArribaIzqVencimiento2); 
            e.Graphics.DrawRectangle(lapiz, recArribaDerVencimiento1);
            e.Graphics.DrawRectangle(lapiz, recArribaDerVencimiento2);

            //Rectangle recIzqAbajo = new Rectangle(10, 555, 250, 535);
            //Rectangle recIzqAbajo1 = new Rectangle(10, 555, 250, 30);
            //Rectangle recIzqAbajo2 = new Rectangle(10, 585, 250, 60);
            //Rectangle recIzqAbajo3 = new Rectangle(10, 850, 250, 120);
            //Rectangle _recCentroAbajo = new Rectangle(265, 555, 300, 535);
            //Rectangle recDerAbajo = new Rectangle(565, 555, 250, 535);
            //Rectangle recDerAbajo1 = new Rectangle(565, 555, 250, 30);
            //Rectangle recDerAbajo2 = new Rectangle(565, 585, 250, 60);
            //Rectangle recDerAbajo3 = new Rectangle(565, 850, 250, 120);
            //Rectangle _recCentroAbajo_arriba = new Rectangle(265, 555, 300, 50);
            //Rectangle _recCentroAbajo_abajo = new Rectangle(265, 970, 300, 120);
            //Rectangle recAbajoIzqVencimiento1 = new Rectangle(90, 850, 170, 60);
            //Rectangle recAbajoIzqVencimiento2 = new Rectangle(90, 910, 170, 60);
            //Rectangle recAbajoDerVencimiento1 = new Rectangle(645, 850, 170, 60);
            //Rectangle recAbajoDerVencimiento2 = new Rectangle(645, 910, 170, 60);

            //e.Graphics.DrawRectangle(lapiz, recIzqAbajo);
            //e.Graphics.DrawRectangle(lapiz, _recCentroAbajo);
            //e.Graphics.DrawRectangle(lapiz, recDerAbajo);
            //e.Graphics.DrawRectangle(lapiz, recIzqAbajo1);
            //e.Graphics.DrawRectangle(lapiz, recIzqAbajo2);
            //e.Graphics.DrawRectangle(lapiz, recIzqAbajo3);
            //e.Graphics.DrawRectangle(lapiz, recDerAbajo1);
            //e.Graphics.DrawRectangle(lapiz, recDerAbajo2);
            //e.Graphics.DrawRectangle(lapiz, recDerAbajo3);
            //e.Graphics.DrawRectangle(lapiz, _recCentroAbajo_arriba);
            //e.Graphics.DrawRectangle(lapiz, _recCentroAbajo_abajo);
            //e.Graphics.DrawRectangle(lapiz, recAbajoIzqVencimiento1);
            //e.Graphics.DrawRectangle(lapiz, recAbajoIzqVencimiento2);
            //e.Graphics.DrawRectangle(lapiz, recAbajoDerVencimiento1);
            //e.Graphics.DrawRectangle(lapiz, recAbajoDerVencimiento2);

            e.Graphics.DrawString("Gestora", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 15, 45);
            e.Graphics.DrawString("Gestora", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 570, 45);
            //e.Graphics.DrawString("Gestora", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 15, 590);
            //e.Graphics.DrawString("Gestora", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 570, 590);

            e.Graphics.DrawString("Caá Guazú 805 - Tel. 425855 - C. Cuatia (Ctes.)", fuente, Brushes.Black, 15, 85);
            e.Graphics.DrawString("Caá Guazú 805 - Tel. 425855 - C. Cuatia (Ctes.)", fuente, Brushes.Black, 570, 85);
            //e.Graphics.DrawString("Caá Guazú 805 - Tel. 425855 - C. Cuatia (Ctes.)", fuente, Brushes.Black, 15, 630);
            //e.Graphics.DrawString("Caá Guazú 805 - Tel. 425855 - C. Cuatia (Ctes.)", fuente, Brushes.Black, 570, 630);

            e.Graphics.DrawString("MUTUAL APOYO SOLIDARIO", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 320, 10);
            e.Graphics.DrawString("DE SERVICIOS FUNEBRES", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 327, 25);
            e.Graphics.DrawString("MAT. INAM S.F 898 - CUIT 33-61113257-9 - DNRP 61112357", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, 280, 37);
            e.Graphics.DrawString("ING. BRUTOS NO CONTRIBUYENTE - IVA NO RESPONSABLE", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, 270, 47);


            //e.Graphics.DrawString("MUTUAL APOYO SOLIDARIO", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 320, 555);
            //e.Graphics.DrawString("DE SERVICIOS FUNEBRES", new Font("Arial", 10, FontStyle.Bold), Brushes.Black, 327, 570);
            //e.Graphics.DrawString("MAT. INAM S.F 898 - CUIT 33-61113257-9 - DNRP 61112357", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, 280, 583);
            //e.Graphics.DrawString("ING. BRUTOS NO CONTRIBUYENTE - IVA NO RESPONSABLE", new Font("Arial", 7, FontStyle.Regular), Brushes.Black, 270, 593);

            e.Graphics.DrawString("PERÍODO", fuente, Brushes.Black, 15, 305);
            e.Graphics.DrawString("PERÍODO", fuente, Brushes.Black, 570, 305);

            e.Graphics.DrawString("1° VENCIMIENTO", fuente, Brushes.Black, 115, 305);
            e.Graphics.DrawString("1° VENCIMIENTO", fuente, Brushes.Black, 670, 305);

            //e.Graphics.DrawString("1° VENCIMIENTO", fuente, Brushes.Black, 115, 855);
            //e.Graphics.DrawString("1° VENCIMIENTO", fuente, Brushes.Black, 670, 855);

            e.Graphics.DrawString("2° VENCIMIENTO", fuente, Brushes.Black, 115, 365);
            e.Graphics.DrawString("2° VENCIMIENTO", fuente, Brushes.Black, 670, 365);

            //e.Graphics.DrawString("2° VENCIMIENTO", fuente, Brushes.Black, 115, 915);
            //e.Graphics.DrawString("2° VENCIMIENTO", fuente, Brushes.Black, 670, 915);

            //e.Graphics.DrawString("PERÍODO", fuente, Brushes.Black, 15, 855);
            //e.Graphics.DrawString("PERÍODO", fuente, Brushes.Black, 570, 855);

            e.Graphics.DrawString("ADHERENTES", fuente, Brushes.Black, 280, 65);
            //e.Graphics.DrawString("ADHERENTES", fuente, Brushes.Black, 280, 610);


            while(totalcupones <  cuponesL.Count)
            {
                //obtengo el socio correspondiente al cupon
                socio = Negocio.Socios.FindById(cuponesL[totalcupones].socio_id);
                socio.localidad = Localidades.FindById(socio.localidad_id);
                socio.zona = Negocio.Zonas.FindById(socio.zona_id);
                socio.adherentes = Adherentes.FindByIdSocio(socio.id);
                //obtengo los periodos
                IList<Periodo> periodosL = Periodos.GetPeriodosByIdCupon(cuponesL[totalcupones].id);
                periodosL.OrderByDescending(x => x.fecha_generacion);
                //obtengo los datos del cupon
                cuponesL[totalcupones].detalles = Cupones.FindAllDetallesByIdCupon(cuponesL[totalcupones].id);
              
                if(cuponporpagina == 0) //imprimo arriba
                {
                    e.Graphics.DrawString("N° Recibo: " + cuponesL[totalcupones].numero, fuente, Brushes.Black, 15, arribaY);
                    e.Graphics.DrawString("N° Recibo: " + cuponesL[totalcupones].numero, fuente, Brushes.Black, 570, arribaY);

                    arribaY += 70;
                    //izquierda
                    e.Graphics.DrawString("Cert. N°: " + String.Format("{0:00000000}", socio.id), fuente, Brushes.Black, 15, arribaY + 20);
                    e.Graphics.DrawString("APELLIDO: " + socio.apellido, fuente, Brushes.Black, 15, arribaY + 40);
                    e.Graphics.DrawString("ZONA: " + socio.zona.zona, fuente, Brushes.Black, 185, arribaY + 40);
                    e.Graphics.DrawString("NOMBRES: " + socio.nombres, fuente, Brushes.Black, 15, arribaY + 60);
                    Rectangle rectIzq = new Rectangle(85, arribaY + 80, 150, fuente.Height * 2);
                    e.Graphics.DrawRectangle(Pens.White, rectIzq);
                    e.Graphics.DrawString("DIRECCIÓN: ", fuente, Brushes.Black, 15, arribaY + 80);
                    e.Graphics.DrawString(socio.direccion, fuente, Brushes.Black, rectIzq);
                    e.Graphics.DrawString("LOCALIDAD: " + socio.localidad.localidad, fuente, Brushes.Black, 15, arribaY + 120);

                    //derecha
                    e.Graphics.DrawString("Cert. N°: " + String.Format("{0:00000000}", socio.id), fuente, Brushes.Black, 570, arribaY + 20);
                    e.Graphics.DrawString("APELLIDO: " + socio.apellido, fuente, Brushes.Black, 570, arribaY + 40);
                    e.Graphics.DrawString("ZONA: " + socio.zona.zona, fuente, Brushes.Black, 740, arribaY + 40);
                    e.Graphics.DrawString("NOMBRES: " + socio.nombres, fuente, Brushes.Black, 570, arribaY + 60);
                    Rectangle rectDer = new Rectangle(640, arribaY + 80, 150, fuente.Height * 2);
                    e.Graphics.DrawRectangle(Pens.White, rectDer);
                    e.Graphics.DrawString("DIRECCIÓN: ", fuente, Brushes.Black, 570, arribaY + 80);
                    e.Graphics.DrawString(socio.direccion, fuente, Brushes.Black, rectDer);
                    e.Graphics.DrawString("LOCALIDAD: " + socio.localidad.localidad, fuente, Brushes.Black, 570, arribaY + 120);

                    arribaY = 100;

                    //string vigencia = string.Empty;

                    foreach (Adherente adherente in socio.adherentes)
                    {
                        //if (adherente.vigencia > DateTime.Now)
                        //{
                        //    vigencia = "*";
                        //}

                        e.Graphics.DrawString(adherente.apellido + ", " + adherente.nombres + "  -  " + adherente.edad, fuente, Brushes.Black, 300, arribaY);
                        arribaY += 20;                        
                    }

                    arribaY = 330;

                    //IMPRIMIR TOTALES PENDIENTE!!!
                    //obtengo los periodos correspondientes al cupon
                    
                    foreach(Periodo periodo in periodosL)
                    {
                        int mes = periodo.periodo.Month;
                        int ano = periodo.periodo.Year;
                        string _periodo = String.Format("{0:00}", mes) + "/" + ano.ToString();

                        e.Graphics.DrawString(_periodo, fuente, Brushes.Black, 15, arribaY);
                        e.Graphics.DrawString(_periodo, fuente, Brushes.Black, 570, arribaY);
                        arribaY += 20;                  
                    }

                    arribaY = 320;

                    //izquierda
                    e.Graphics.DrawString(periodosL[0].vencimiento_1.ToShortDateString(), fuente, Brushes.Black, 150, arribaY);
                    e.Graphics.DrawString("$ " + cuponesL[totalcupones].total.ToString(), fuente, Brushes.Black, 150, arribaY + 20);
                    //derecha
                    e.Graphics.DrawString(periodosL[0].vencimiento_1.ToShortDateString(), fuente, Brushes.Black, 680, arribaY);
                    e.Graphics.DrawString("$ " + cuponesL[totalcupones].total.ToString(), fuente, Brushes.Black, 680, arribaY + 20);

                    arribaY += 60;

                    //izquierda
                    e.Graphics.DrawString(periodosL[0].vencimiento_2.ToShortDateString(), fuente, Brushes.Black, 150, arribaY);
                    e.Graphics.DrawString("$ " + (cuponesL[totalcupones].total + Convert.ToDouble(periodosL[0].recargo)).ToString(), fuente, Brushes.Black, 150, arribaY + 20);
                    //derecha
                    e.Graphics.DrawString(periodosL[0].vencimiento_2.ToShortDateString(), fuente, Brushes.Black, 680, arribaY);
                    e.Graphics.DrawString("$ " + (cuponesL[totalcupones].total + Convert.ToDouble(periodosL[0].recargo)).ToString(), fuente, Brushes.Black, 680, arribaY + 20);

                    arribaY += 120;

                    e.Graphics.DrawString(cuponesL[totalcupones].numero, fuente_cdb, Brushes.Black, 15, arribaY);
                    //e.Graphics.DrawString(cuponesL[totalcupones].numero, fuente_cdb, Brushes.Black, 570, arribaY);

                    e.Graphics.DrawString("Mensaje: " + socio.observaciones, fuente, Brushes.Black, 290, 430);

                    arribaY += 20;
                }
                else // imprimo abajo
                {
                    //e.Graphics.DrawString("N° Recibo: " + cuponesL[totalcupones].numero, fuente, Brushes.Black, 15, abajoY);
                    //e.Graphics.DrawString("N° Recibo: " + cuponesL[totalcupones].numero, fuente, Brushes.Black, 570, abajoY);

                    //abajoY += 70;

                    ////izquierda
                    //e.Graphics.DrawString("Cert. N°: " + String.Format("{0:00000000}", socio.id), fuente, Brushes.Black, 15, abajoY + 20);
                    //e.Graphics.DrawString("ZONA: " + socio.zona.zona, fuente, Brushes.Black, 185, abajoY + 40);
                    //e.Graphics.DrawString("APELLIDO: " + socio.apellido, fuente, Brushes.Black, 15, abajoY + 40);                 
                    //e.Graphics.DrawString("NOMBRES: " + socio.nombres, fuente, Brushes.Black, 15, abajoY + 60);
                    //Rectangle rectIzq = new Rectangle(85, abajoY + 80, 150, fuente.Height * 2);
                    //e.Graphics.DrawRectangle(Pens.White, rectIzq);
                    //e.Graphics.DrawString("DIRECCIÓN: ", fuente, Brushes.Black, 15, abajoY + 80);
                    //e.Graphics.DrawString(socio.direccion, fuente, Brushes.Black, rectIzq);
                    //e.Graphics.DrawString("LOCALIDAD: " + socio.localidad.localidad, fuente, Brushes.Black, 15, abajoY + 120);
                    

                    ////derecha
                    //e.Graphics.DrawString("Cert. N°: " + String.Format("{0:00000000}", socio.id), fuente, Brushes.Black, 570, abajoY + 20);
                    //e.Graphics.DrawString("APELLIDO: " + socio.apellido, fuente, Brushes.Black, 570, abajoY + 40);
                    //e.Graphics.DrawString("ZONA: " + socio.zona.zona, fuente, Brushes.Black, 740, abajoY + 40);
                    //e.Graphics.DrawString("NOMBRES: " + socio.nombres, fuente, Brushes.Black, 570, abajoY + 60);
                    //Rectangle rectDer = new Rectangle(640, abajoY + 80, 150, fuente.Height * 2);
                    //e.Graphics.DrawRectangle(Pens.White, rectDer);
                    //e.Graphics.DrawString("DIRECCIÓN: ", fuente, Brushes.Black, 570, abajoY + 80);
                    //e.Graphics.DrawString(socio.direccion, fuente, Brushes.Black, rectDer);
                    //e.Graphics.DrawString("LOCALIDAD: " + socio.localidad.localidad, fuente, Brushes.Black, 570, abajoY + 120);

                    //abajoY = 650;

                    //foreach (Adherente adherente in socio.adherentes)
                    //{
                    //    e.Graphics.DrawString(adherente.apellido + ", " + adherente.nombres, fuente, Brushes.Black, 300, abajoY);
                    //    abajoY += 20;
                    //}

                    //abajoY = 880;

                    ////obtengo los periodos correspondientes al cupon                

                    
                    //foreach (Periodo periodo in periodosL)
                    //{                     
                    //    int mes = periodo.periodo.Month;
                    //    int ano = periodo.periodo.Year;
                    //    string _periodo = String.Format("{0:00}", mes) + "/" + ano.ToString();

                    //    e.Graphics.DrawString(_periodo, fuente, Brushes.Black, 15, abajoY);
                    //    e.Graphics.DrawString(_periodo, fuente, Brushes.Black, 570, abajoY);
                    //    abajoY += 20;
                    //}

                    //abajoY = 870;

                    ////izquierda
                    //e.Graphics.DrawString(periodosL[0].vencimiento_1.ToShortDateString(), fuente, Brushes.Black, 150, abajoY);
                    //e.Graphics.DrawString("$ " + cuponesL[totalcupones].total.ToString(), fuente, Brushes.Black, 150, abajoY + 20);
                    ////derecha
                    //e.Graphics.DrawString(periodosL[0].vencimiento_1.ToShortDateString(), fuente, Brushes.Black, 680, abajoY);
                    //e.Graphics.DrawString("$ " + cuponesL[totalcupones].total.ToString(), fuente, Brushes.Black, 680, abajoY + 20);

                    //abajoY += 60;

                    ////izquierda
                    //e.Graphics.DrawString(periodosL[0].vencimiento_2.ToShortDateString(), fuente, Brushes.Black, 150, abajoY);
                    //e.Graphics.DrawString("$ " + (cuponesL[totalcupones].total + Convert.ToDouble(periodosL[0].recargo)).ToString(), fuente, Brushes.Black, 150, abajoY + 20);
                    ////derecha
                    //e.Graphics.DrawString(periodosL[0].vencimiento_2.ToShortDateString(), fuente, Brushes.Black, 680, abajoY);
                    //e.Graphics.DrawString("$ " + (cuponesL[totalcupones].total + Convert.ToDouble(periodosL[0].recargo)).ToString(), fuente, Brushes.Black, 680, abajoY + 20);

                    //abajoY += 110;

                    //e.Graphics.DrawString(cuponesL[totalcupones].numero, fuente_cdb, Brushes.Black, 15, abajoY);
                    //e.Graphics.DrawString(cuponesL[totalcupones].numero, fuente_cdb, Brushes.Black, 570, abajoY);

                    //e.Graphics.DrawString("Mensaje: " + socio.observaciones, fuente, Brushes.Black, 290, 990);

                    //abajoY += 20;
                }


                totalcupones += 1;
                if (totalcupones < cuponesL.Count) 
                {
                    cuponporpagina = 0;
                    e.HasMorePages = true;
                    return;                    
                }
                else 
                {
                    cuponporpagina += 1;
                    e.HasMorePages = false;
                }
            }
           
        }
    }
}


